<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:nyext="urn:noury-extensions" xmlns:nydml="http://www.nourysolutions.com/salamanca/DML" xmlns:nyp="http://www.nourysolutions.com/salamanca/Project">
  <xsl:output method="text" encoding="UTF-8"/>

  <xsl:variable name="dml-href" select="/nyp:project/nyp:dml/@href" />
  <xsl:variable name="dml-doc" select="document($dml-href)" />

  <xsl:template match="nydml:domain" mode="dot-declaration">
    <xsl:text>
  </xsl:text>
    <xsl:value-of select="@name" />
    <xsl:text>;</xsl:text>
  </xsl:template>

  <xsl:template match="nydml:domain" mode="dot-link-extension">
    <xsl:if test="@extends">
      <xsl:text>
  </xsl:text>
      <xsl:value-of select="@extends" />
      <xsl:text> -&gt; </xsl:text>
      <xsl:value-of select="@name" />
      <xsl:text> [arrowtail=onormal arrowsize=1.5 len=1];</xsl:text>
    </xsl:if>
  </xsl:template>

  <xsl:template match="nydml:assoc" mode="dot-link-composition">
    <xsl:text>
  </xsl:text>
    <xsl:value-of select="nydml:end[1]/@target" />
    <xsl:text> -&gt; </xsl:text>
    <xsl:value-of select="nydml:end[2]/@target" />
    <xsl:text> [</xsl:text>
    <xsl:if test="count(nydml:end[@multiplicity!='0..1' and @multiplicity!='1']) &gt;= 2">
      <xsl:text>label="</xsl:text>
      <xsl:value-of select="@name" />
      <xsl:text>" </xsl:text>
    </xsl:if>
    <xsl:text>headlabel="</xsl:text>
    <xsl:value-of select="nydml:end[2]/@multiplicity" />
    <xsl:text>" arrowtail=</xsl:text>
    <xsl:choose>
      <xsl:when test="@association='composition'">
        <xsl:text>diamond len=2</xsl:text>
      </xsl:when>
      <xsl:when test="@association='aggregation'">
        <xsl:text>odiamond len=2.5</xsl:text>
      </xsl:when>
      <xsl:otherwise>
        <xsl:text>none len=3</xsl:text>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:text> taillabel="</xsl:text>
    <xsl:value-of select="nydml:end[1]/@multiplicity" />
    <xsl:text>"];</xsl:text>
  </xsl:template>

  <xsl:template match="/">
    <xsl:text>digraph model {
  overlap=false;
  node [shape=box fontname="Arial"];
  edge [arrowhead=none fontname="Arial" fontsize=10 labelfontname="Arial" labelfontsize=12];
</xsl:text>
    <xsl:apply-templates select="$dml-doc//nydml:domain" mode="dot-declaration" />
    <xsl:text>
</xsl:text>
    <xsl:apply-templates select="$dml-doc//nydml:domain[@extends]" mode="dot-link-extension" />
    <xsl:text>
</xsl:text>
    <xsl:apply-templates select="$dml-doc//nydml:assoc" mode="dot-link-composition" />
    <xsl:text>
}
</xsl:text>
  </xsl:template>
</xsl:stylesheet>
